在 Nreal 设备上使用

EasyAR 支持的 Nreal SDK 版本

以下 Nreal SDK 版本在当前EasyAR发布时已经支持:1.5.7 - 1.8.0,如果EasyAR使用到的Nreal接口在Nreal新版本中没有变化,可能也是可以直接支持的;如果这些接口存在少量变化,在EasyAR更新前也可以自行修改NrealFrameSource脚本。

Nreal的支持是通过EasyAR Sense的自定义相机实现的。在使用个人版时,如果运行时选择了自定义相机,EasyAR每次启动将只能使用100秒。使用付费版本的EasyAR Sense没有这个限制。

导入 Nreal Unity Asset Package

如果你在使用EasyAR的sample,需要确保在导入Nreal Unity Asset Package之后再打开sample场景,否则可能会出现异常。如果在这之前已经打开并保持了场景,建议删除并重新导入。

如果你已经有一个可以运行的Nreal工程,可以跳过这一步。

Nreal官方 获取Nreal SDK的 unitypackage 文件,通过 Unity > Assets > Import Package 来导入Nreal SDK。

创建 Nreal Unity Package (虚拟)

在这个版本发布的时候,Nreal SDK还未发布成一个Unity Package,但EasyAR会使用Unity Package来检查和使用依赖。

在Unity工程的 Packages 文件夹中创建一个文件夹 com.nreal.sdk ,并在该文件夹中创建文件 package.json ,其内容如下,注意其中 version 字段值需与你获取的Nreal SDK的版本号一致。

{
    "name": "com.nreal.sdk",
    "displayName": "Nreal MR SDK for Unity",
    "version": "1.7.0",
    "unity": "2019.4",
    "description": "",
    "keywords": [],
    "dependencies": {}
}

在创建完上述文件之后,Unity工程目录中的文件结构会是这样的

.
├── Assets
└── Packages
   └── com.nreal.sdk
       └── package.json

如果今后Nreal官方通过Unity Package来发布SDK,就不再需要创建这个虚拟的Package。但如果Nreal官方发布的package name与上面不同,则需要修改EasyAR Package中所有 .asmdef 文件中使用到的 com.nreal.sdk 字符串为Nreal官方的name。

创建Nreal可使用的场景

如果你已经有一个可以运行的Nreal工程,可以跳过这一步。

根据Nreal官方文档或demo,创建一个可以在Nreal设备上运行的场景,也可以使用现有demo。一般建议在这个场景可以正常运行后再进行下一步。

在场景中添加 EasyAR 组件

参考 从零创建可运行的工程 中的描述,在场景中添加EasyAR的AR Session及其它需要的节点。可以使用GameObject菜单中的 EasyAR Sense > 一些AR Session预设或单独功能创建完成所需功能需要的AR Session。 EasyAR Sense > Eyewear 中收集了一些在眼镜上推荐使用的预设。

../_images/image_g5_1.png

对于在Nreal设备上的使用,需要注意在AR Session启动后 NrealFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSourceFirstAvailableActiveChild 并确保 NrealFrameSource 的transform顺序是所有frame source的第一个,

../_images/image_g5_2.png

或者也可以设置 ARComponentPicker.FrameSourceSpecify 并手动指定为 NrealFrameSource

../_images/image_g5_3.png

如果AR Session中还没有 NrealFrameSource ,可以通过菜单 EasyAR Sense > HMD > Frame Source : Nreal 添加。

../_images/image_g5_4.png

然后需要在场景中创建 Target 或 Map,比如,如果你需要使用 稀疏空间地图 建图功能,你需要使用 EasyAR Sense > SpatialMap > Map : Sparse SpatialMap 创建 SparseSpatialMapController

../_images/image_g1_18.png

最后,一个简单的可以在Nreal上运行稀疏空间地图和稠密空间地图建图功能的场景可能是这样的,

../_images/image_g5_5.png

场景可能会根据使用的 Nreal SDK或EasyAR Sense Unity Plugin 功能不同而不同。